﻿#define  _CRT_SECURE_NO_WARNINGS 1
//使⽤回到函数改造后
#include <stdio.h>
//int add(int a, int b)
//{
//	return a + b;
//}
//int sub(int a, int b)
//{
//	return a - b;
//}
//int mul(int a, int b)
//{
//	return a * b;
//}
//int div(int a, int b)
//{
//	return a / b;
//}
//void calc(int(*pf)(int, int))
//{
//	int ret = 0;
//	int x, y;
//	printf("输⼊操作数：");
//	scanf("%d %d", &x, &y);
//	ret = pf(x, y);
//	printf("ret = %d\n", ret);
//}
//int main()
//{
//	int input = 1;
//	do
//	{
//		printf("******************");
//		printf(" 1:add");
//		printf(" 3:mul");
//		printf("******************");
//		printf("请选择：");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			calc(add);
//			break;
//		case 2:
//			calc(sub);
//			break;
//		case 3:
//			calc(mul);
//			break;
//		case 4:
//			calc(div);
//			break;
//		case 0:
//			printf("退出程序\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//		}
//	} while (input);
//	return 0;
//}







//int add(int x,int y)
//{
//	return x + y;
//}
//int sub(int x,int y)
//{
//	return x - y;
//}
//int mul(int x,int y)
//{
//	return x * y;
//}
//int div(int x,int y)
//{
//	return x / y;
//}
//void calc(int(*pf)(int , int ))
//{
//	printf("what do you want2");
//	int x = 0;
//	int y = 0;
//	scanf("%d %d", &x, &y);
//	int ret = pf(x, y);
//	printf("%d       \n", ret);
//}
//int main()
//{
//	int input = 1;
//
//	do {
//		printf("1.+\n");
//		printf("2.-\n");
//		printf("3.*\n");
//		printf("4./\n");
//		printf("what do you want1\n");
//		scanf("%d", &input);
//
//		//int a = 0;
//
//		switch (input)
//		{
//		case 1:
//			calc(add);
//			break;
//		case 2:
//			calc(sub);
//			break;
//		case 3:
//			calc(mul);
//			break;
//		case 4:
//			calc(div);
//			break;
//		}
//	} while (input);
//	return 0;
//}
//
//
//void xw(int* p, int sz)
//{
//	for (int i = 0; i < sz; i++)
//	{
//		int pasr = 0;
//		for (int j = 0; j < sz; j++)
//		{
//			while (i != j)
//			{
//		
//				if (p[i] == p[j])
//				{
//					pasr = 1;
//					i++;
//				}
//				if (pasr == 0)
//				{
//					printf("%d", p[i]);
//					j++;
//				}
//			}
//		}
//	}
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,1,2,3,4 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	xw(arr, sz);
//	return 0;
//}
int jan( int a)
{
	return 31;
}
int feb(int a)
{
	if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
		return 29;
	else return 28;
}
int mar(int a)
{
	return 31;
}
int  apr(int a)
{
	return 30;
}
int  may(int a)
{
	return 31;
}
int jun(int a)
{
	return 30;
}
int jul(int a)
{
	return 31;
}
int aug(int a)
{
	return 31;
}
int sept(int a)
{
	return 30;
}
int  oct(int a)
{
	return 31;
}
int nov(int a)
{
	return 30;
}
int dec(int a)
{
	return 31;
}
void mz(int (*p)(int),int a)
{
	int ret = p(a);
	printf("%d", ret);
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	switch (b)
	{
	case 1:mz(jan, a); break;
	case 2:mz(feb, a); break;
	case 3:mz(mar, a); break;
	case 4:mz(apr, a); break;
	case 5:mz(may, a); break;
	case 6:mz(jun, a); break;
	case 7:mz(jul, a); break;
	case 8:mz(aug, a); break;
	case 9:mz(sept, a); break;
	case 10:mz(oct, a); break;
	case 11:mz(nov, a); break;
	case 12:mz(dec, a); break;
	}
		 return 0;
}